포스트

13. 중복 빈 문제

13. 중복 빈 문제

중복 빈 문제

조회 빈이 2개 이상이면 어떻게 될까? - 문제

  • 일반적으로 타입으로 조회하게 된다면 상속으로 여러개의 빈 중 어떤걸 가져와야할지 문제가 생길 수 있다.
  • 하위타입으로 지정하면? → 문제는 해결되지만 DIP 위반
    • 역할과 구현의 분리에 어긋남
    • 언제나 추상적인 것에 의존하도록 만들기

해결법

@Autowired 필드명 매칭

  • @Autowired 는 타입 매칭을 시도하고 여러 빈이 있으면 필드이름, 파라미터 이름으로 빈 이름을 추가 매칭
1
DiscountPolicy rateDiscountPolciy 
  • 변수 이름을 빈 이름을 맞추어서 특정 빈을 지정할 수 있다!
  • xml 에서는 동작하지 않는다.

@Quilifier 사용

  • @Quilifier 는 추가 구분자를 붙여주는 방법, 빈 이름을 바꾸는 것이 아니다.
1
2
3
4
5
6
7
8
9
10
11
@Component
@Quilifier("rateDisocuntPolicy")
public class RateDisocuntPolicy implements DisocuntPocily {

...

}

Bean을 등록

@Quilifier("rateDisocuntPolicy") DiscountPolicy rateDiscountPolciy 
  • 만약 @Quilifier("rateDisocuntPolicy") 를 등록 해놓고 이 이름을 못찾으면?
  • 마찬가지로 Bean의 이름 중에 rateDisocuntPolicy 이름의 스프링 빈을 다음으로 수행한다.
  • 기왕이면 @Quilifier(“rateDisocuntPolicy”)@Quilifier() 로만 사용할 때 쓰자…

@Primary 사용

  • 중복된 Bean이 있을 시에 우선순위를 지정해주는 방법
  • 가장 편한 방법 → 코드가 더러워지지 않는다.
  • @Primary 를 사용되어 져있는 Bean을 우선적으로 등록된다.
    • 메인 로직이 많은 객체 등을 먼저 우선순위 할 수 있는 느낌으로 응용 가능

어떻게 사용하면 좋을까?

  1. 주로 사용하는 빈은 @Primary 를 사용해 사용한다.
  2. 추가적으로 필요한 빈으로 바꿔야할 객체에 @Qulifier 의 이름을 지정해놓고 호출해서 사용한다.
  3. 우선 순위는 @Qulifier > @Primary 이다.
    1. 스프링은 언제나 손이 많이 가는 수동에 우선순위를 부여한다고 생각하자.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

© 김규형. 일부 권리 보유

Powered by Jekyll with Chirpy theme